'use strict';
const rules={
    title:{
        type:'string',
        require:true,
        desc:'视频标题'
    },
    video_id:{
        type:'int',
        require:true,
        desc:'作品ID'
    },
    desc:{
        type:'string',
        require:true,
        desc:'视频描述'
    },
    url: {
        type: 'string',
        required: true,
        desc: '视频地址'
    }
}
const Controller = require('egg').Controller;

class Video_detailController extends Controller {
    // 创建视频
  async save() {
    // 结构
    let {app,ctx}=this
    // 获取当前用户id
    let user_id=ctx.authUser.id
    // 参数验证
    ctx.validate(rules)
    // 获取传递的参数
    let {title,desc,video_id,url}=ctx.request.body

    // 判断作品是否存在
    let video=await app.model.Video.findOne({
        where:{
            user_id,
            id:video_id
        }
    })
    if(!video){
       return ctx.throw(400,'所属作品不存在')
    }
    // 创建视频
    let res=await app.model.VideoDetail.create({
        title,desc,video_id,url
    })
    // 返回创建视频结果
    ctx.apiSuccess(res)
  }

  // 修改视频
  async update(){
    //   结构
    let {app,ctx}=this
    // 获取当前用户
    let currentUser=ctx.authUser
    // 参数验证
    ctx.validate({
        id:{
            type:'int',
            required:true,
            desc:'视频ID'
        },
        ...rules
    })
    // 获取参数
    let {title,desc,video_id,url}=ctx.request.body
    let {id}=ctx.params
    // 判断作品是否存在
    let video=await app.model.Video.findOne({
        where:{
            id:video_id,
            user_id:currentUser.id
        }
    })
    if(!video){
      return  ctx.throw(400,'所属作品不存在')
    }
    // 判断ID记录是否存在
    let vod=await app.model.VideoDetail.findOne({
        where:{
            id,
            video_id
        }
    })
    if(!vod){
       return ctx.throw(400,'记录不存在')
    }
    // 更新视频
    let res=await vod.update({title,desc,video_id,url})
    // 返回更新
    ctx.apiSuccess(res)
    }

    // 删除视频
    async destroy(){
        // 解构
        let {ctx,app}=this
        let user_id=ctx.authUser.id
        // 参数验证
        ctx.validate({
            id:{
                type:'int',
                required:true,
                desc:'记录ID'
            }
        })
        // 获取视频id
        let {id}=ctx.request.body
        // 关联作品表查询判断视频ID是否存在
        let video=await app.model.VideoDetail.findOne({
            where:{
                id
            },
            include:[
                {
                    model:app.model.Video,
                    where:{
                        user_id
                    }
                }
            ]
        })
        if(!video){
           return ctx.throw(400,'记录不存在')
        }
        // 删除视频
       await video.destroy()
        // 返回结果
        ctx.apiSuccess('ok')
    }

    async index() {
        let { ctx, app } = this;
        ctx.validate({
            video_id: {
                type: "int",
                required: true,
                desc: "视频ID"
            }
        });
        let { video_id } = ctx.params;
        let rows = await app.model.VideoDetail.findAll({
            where: {
                video_id
            }
        });
        ctx.apiSuccess(rows);
    }
}

module.exports = Video_detailController;
